<?php

// 查看环境信息
// phpinfo();

$a = 10;
$b = &$a; //引用赋值 两个变量申请的内存空间都是一块

// &$a 引用传值 在函数内部的变化会影响函数外面
function demo(&$a, $b, $c)
{
    //局部变量
    $a += 10;
    //返回值return之后无执行
    return $a + $b + $c;
}

var_dump(demo($a,2,3));

var_dump($a); //打印也是全局变量

// 全局变量：整个脚本
// 局部变量：作用于函数内部
// 静态变量：保留上一次运行的结果
// global 全部变量  引用全局变量


// 全局范围的种类：全局变量、局部变量、静态变量
$test = '全局变量';

function foo()
{
    //静态变量，会保留上一次运行的结果
    static $num = 0;
    // global $test;  //引用外部的全局变量
    $test = '在函数内部中 定义局部变量';

    $num++;
    return $num;
}

var_dump(foo());
var_dump(foo());
var_dump(foo());
var_dump(foo());

// include require

// include('helper.php'); //文件不存在会报错非致命错误
// include_once('helper.php'); //文件不存在会报错非致命错误
// require('helper.php'); //文件不存在直接终止程序了 致命错误
require_once('helper.php'); //文件不存在直接终止程序了 致命错误

// include_once require_once 重复引入检测的问题
// require_once 直接一刀切 如果引入不进来 程序直接结束

echo helper();
// echo PHP_EOL; // \r\ns
echo "<br />";

echo abs(-1);
echo "<br />";

echo floor(3.7); //取小整 3
echo "<br />";
echo ceil(3.2); //取大4
echo "<br />";

echo mt_rand(0, 100); //随机整数
echo "<br />";

echo round(4.7); //四舍五入
echo "<br />";


//时间戳 从1970：0：0：0 ~ 一直到现在的 毫秒(js) 秒(s) 1s= 1000ms
//输出当前的时间戳
echo time();
echo "<br />";

//标准时间格式
echo date("Y-m-d H:i:s", time());
echo "<br />";

//固定时间转换为时间戳
$date = "2024-09-05";
echo strtotime($date);
echo "<br />";

//文件创建时间 
$ctime = filectime("./input.txt");
echo date("Y-m-d H:i:s", $ctime);
echo "<br />";

// 文件访问时间
$atime = fileatime("./input.txt");
echo date("Y-m-d H:i:s", $atime);
echo "<br />";

// 文件修改时间
$mtime = filemtime("./input.txt");
echo date("Y-m-d H:i:s", $mtime);
echo "<br />";


// 索引数组
$arr = ['a','b','c'];
$arr[] = 'd'; //没指定下标的 会自动自动+1
var_dump($arr);

//关联数组
$arr2 = ['nickname'=>'张三', 'age'=>20, 'sex'=>'男'];
$arr2[] = 'hello world'; //没有数字下标就默认从0开始

//删除一个变量 或者是一个数组元素
unset($arr2['age']);
var_dump($arr2);
echo "<br />";

//count 返回数组长度
var_dump(count($arr2));
echo "<br />";

// js arr.includes判断一个元素是否在数组中
// in_array 判断元素是否在数组中
var_dump(in_array('男', $arr2));
echo "<br />";

// print_r == var_dump
// print_r($arr2);
// echo "<br />";
// var_dump($arr2);

$arr3 = ['a','c','b','e','f','s','x','z'];

//一个针对值进行排序 升序和降序
sort($arr3); //升序
rsort($arr3); //降序
echo "<br />";

//针对索引进行排序
ksort($arr3); //升序
krsort($arr3); //降序
var_dump($arr3);
echo "<br />";

//字符串 转换为  数组 split == explode
//数组 转换为 字符串 join == implode
$str = "1,2,3,4,5";
$arr = explode(",", $str);
var_dump($arr);

$str = implode("-", $arr);
var_dump($str);
echo "<br />";


$arr = ['a','b','c','d','e','f','g',5,7,1];

//从数组中随机选多个 返回的是随机选择的下标
$res = array_rand($arr, 2);
var_dump($res);
echo "<br />";

//将数组进行统计 求和
$res = array_sum($arr);
var_dump($res);
echo "<br />";

//返回数组中第一个元素的下标
$res = array_key_first($arr);
var_dump($res);
echo "<br />";


//返回数组中最后一个元素的下标
$res = array_key_last($arr);
var_dump($res);
echo "<br />";

$str = "123 test";
// printf(输出的格式, 输出的变量);
printf("%d", $str);
printf("%o", $str);
echo "<br />";
echo "\r\n";

//$.trim 去除两边空白 ltrim rtrim trim
$str = "       Hello World!         ";
echo $str;
echo "\r\n";
echo ltrim($str);
echo "\r\n";
echo rtrim($str);
echo "\r\n";
echo trim($str);
echo "<br />";

//加密的方式
// echo md5('g687asd');
// exit;
$salt = "4333493d991d930c7fa1d4d4f83fb0c9";
echo md5("123456$salt"); //md5不可逆
echo "<br />";
echo sha1("123456");
echo "<br />";

// str_replace str_ireplace不区分大小写 替换
echo str_ireplace("WORLD","John","Hello world!");
echo "<br />";

//搜索  js indexOf -1 php 找不到返回false
$res = stripos("Hello world!","WO"); 
var_dump($res);
echo "<br />";


// 随机地打乱字符串中的所有字符
echo str_shuffle("Hello World");
echo "<br />";

$str = "<b>加粗</b><script src='http://www.xxxx.com/index.js'></script>";
//去除html标签的函数  比较安全的一个方法
$text = strip_tags($str);
echo $text;
echo "<br />";

// strtolower()  strtoupper() 大小写转换
echo strtolower("Hello WORLD!");
echo "<br />";
echo strtoupper("Hello WORLD!");
echo "<br />";

// substr  截取字符串
// substr(截取的字符串, 截取的开始位置, 截取的长度);
$res = substr("hello world", 3, 5);
echo $res;
echo "<br />";







